package com.reger.l2cache.annotation;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * 
 * 该注解描述多级缓存调用过程
 * 
 * 1.通过key生成cachekey
 * 2.如果缓存中找到，直接从缓存返回，
 * 3.如果缓存中没有找到，请求缓存key对应的锁，
 * 4.如果没有获取锁，就等待5毫秒后重复1的操作
 * 5.如果获取锁，就调用当前方法得到结果
 * 6.结果写入缓存
 * 7.结果返回
 * @author leige
 *
 */
@Inherited
@Target(METHOD)
@Retention(RUNTIME)
public @interface L2Cache {
	
	/**
	 * 缓存时生成key，这个值通过SpEl运算后输入
	 * @return 生成key的SpEl
	 */
	String key();

	/**
	 * 缓存超时时间
	 * @return 缓存时间（毫秒）
	 */
	long timeOut() default 2000;
}
